<?php
namespace app\common\loglic;

use app\common\loglic\Model;

class Pay extends Model
{
    /**
     * 生成订单并返回所有订单信息
     * @param int $payId 订单ID
     * @param bool $cache 是否开启缓存功能 由后台统一配置
     * @param string $with 预关联查询字段 orders_user,orders_goods
     * @return array|null 不为空时返回修改后的数据
     */
    public function createOrder($post=[])
    {
        $post = array_merge([
            'pay_name'        => 'payName',
            'pay_sign'        => $this->createSign(),
            'pay_info_id'     => 1,
            'pay_user_id'     => 1,
            'pay_price'       => 0,
            'pay_quantity'    => 1,
            'pay_total_fee'   => 0,
            'pay_status'      => 1,
            'pay_model'       => 'recharge',
            'pay_scene'       => 'pc',
            'pay_platform'    => 'alipay',
            'pay_create_time' => time(),
            'pay_update_time' => time(),
            'pay_content'     => '---',
        ],$post);
        $post['pay_id'] = $this->dbSave('pay',$post);
        return $post;
    }

    /**
     * 生成唯一订单号
     * @version 1.0.0 首次引入
     * @return strint 唯一订单号
     */
    public function createSign()
    {
        return date("YmdHis").mt_rand(10000, 99999);
    }

    /**
     * 充值成功回调接口
     * @param array $post 通知参数
     * @param array $payInfo 数据库订单信息
     * @return int 影响条数
     */
    public function success($post=[], $payInfo=[])
    {
        //已处理过的订单直接退出
        if($payInfo['pay_status'] != 1){
            return false;
        }
        //修改支付状态为成功
        $this->dbUpdate('pay', ['pay_id'=>$payInfo['pay_id']], [
            'pay_status'      => 2,
            'pay_number'      => $payInfo['pay_number'],
            'pay_update_time' => time(),
        ]);
        //积分充值业务
        if($payInfo['pay_model'] == 'recharge'){
            return model('common/Score','loglic')->incRecharge($payInfo['pay_user_id'],$payInfo['pay_total_fee'],$payInfo['pay_id']);
        }
        return true;
    }
    
     /**
     * 充值失改回调接口
     * @param array $post 通知参数
     * @param array $payInfo 数据库订单信息
     * @return int 影响条数
     */
    public function fail($post=[], $payInfo=[])
    {
        return false;
    }

    /**
     * 通过系统订单号获取订单信息
     * @param string $sign 必需;系统订单号
     * @return mixed obj|null
     */
    public function findBySign($sign='')
    {
        return $this->dbGet('pay',[
            'cache' => false,
            'where' => [
                ['pay_sign','eq',$sign],
            ],
        ]);
    }

    public function deleteId($id=0)
    {
        if(!$id){
            return 0;
        }
        return $this->dbDelete('pay', ['pay_id'=>$id]);
    }

    public function select($args=[])
    {
        return $this->dbSelect('pay', $args);
    }
    
    public function selectPage($args=[], $pageSize=10, $pageNumber=1, $isTotal=false, $query=['page'=>1])
    {
        return $this->dbSelectPage('pay', $args, $pageSize, $pageNumber, $isTotal, $query);
    }
}
?>